package controller;

import java.util.ArrayList;
import java.util.List;

import model.Administracion;
import model.Sucursal;
import beans.AdministracionBean;
import beans.SucursalBean;
import dao.HibernateAdministracionDAO;
import dto.AdministracionDTO;

public class AdministradorAdministracion {
	private static AdministradorAdministracion instancia;

	private AdministradorAdministracion() {

	}

	public static AdministradorAdministracion getInstancia() {
		if (instancia == null) {
			instancia = new AdministradorAdministracion();
		}
		return instancia;
	}

	public List<AdministracionBean> fromModelToBean(
			List<Administracion> administracions) {
		List<AdministracionBean> administracionsBean = new ArrayList<AdministracionBean>();
		for (Administracion administracion : administracions) {
			administracionsBean.add(fromModelTOBean(administracion));
		}
		return administracionsBean;
	}

	public AdministracionBean fromModelTOBean(Administracion administracion) {
		AdministracionBean administracionBean = null;
		if (administracion != null) {
			administracionBean = new AdministracionBean();
			administracionBean.setArea(AdministradorArea.getInstancia()
					.fromModelTOBean(administracion.getArea()));
			administracionBean.setId(administracion.getId());
			administracionBean.setNotasDevolucion(AdministradorNotaDevolucion
					.getInstancia().fromModelTOBean(
							administracion.getNotasDevolucion()));
			administracionBean.setOrdenesCompra(AdministradorOrdenCompra
					.getInstancia().fromModelTOBean(
							administracion.getOrdenesCompra()));
			administracionBean.setPlanesProduccion(AdministradorPlanProduccion
					.getInstancia().fromModelTOBean(
							administracion.getPlanesProduccion()));
			administracionBean.setSucursal(AdministradorSucursal.getInstancia()
					.fromModelTOBean(administracion.getSucursal()));
			administracionBean.setAdministrativos(AdministradorEmpleado.getInstancia()
					.transformModeltoBeanAdm(administracion.getAdministrativos()));
		}
		return administracionBean;
	}

	public List<Administracion> fromDTOTOModel(
			List<AdministracionDTO> administracionsDTO) {
		List<Administracion> administracions = new ArrayList<Administracion>();
		for (AdministracionDTO administracionDTO : administracionsDTO) {
			administracions.add(fromDTOTOModel(administracionDTO));
		}
		return administracions;
	}

	public List<AdministracionDTO> fromModelTODTO(
			List<Administracion> administracions) {
		List<AdministracionDTO> administracionsDTO = new ArrayList<AdministracionDTO>();
		for (Administracion administracion : administracions) {
			administracionsDTO.add(fromModelTODTO(administracion));
		}
		return administracionsDTO;
	}

	public Administracion fromDTOTOModel(AdministracionDTO administracionDTO) {
		Administracion administracion = null;
		if (administracionDTO != null) {
			administracion = new Administracion();
			administracion.setArea(AdministradorArea.getInstancia()
					.fromDTOTOModel(administracionDTO.getArea()));
			administracion.setId(administracionDTO.getId());
			administracion.setNotasDevolucion(AdministradorNotaDevolucion
					.getInstancia().fromDTOTOModel(
							administracionDTO.getNotasDevolucion()));
			administracion.setOrdenesCompra(AdministradorOrdenCompra
					.getInstancia().fromDTOTOModel(
							administracionDTO.getOrdenesCompra()));
			administracion.setPlanesProduccion(AdministradorPlanProduccion
					.getInstancia().fromDTOTOModel(
							administracionDTO.getPlanesProduccion()));
			administracion.setSucursal(AdministradorSucursal.getInstancia()
					.fromDTOTOModel(administracionDTO.getSucursal()));
			administracion.setAdministrativos(AdministradorEmpleado.getInstancia()
					.transformDTOTOModelAdm(administracionDTO.getAdministrativos()));
		}
		return administracion;
	}

	public AdministracionDTO fromModelTODTO(Administracion administracion) {
		AdministracionDTO administracionDTO = null;
		if (administracion != null) {
			administracionDTO = new AdministracionDTO();
			administracionDTO.setArea(AdministradorArea.getInstancia()
					.fromModelTODTO(administracion.getArea()));
			administracionDTO.setId(administracion.getId());
			administracionDTO.setNotasDevolucion(AdministradorNotaDevolucion
					.getInstancia().fromModelTODTO(
							administracion.getNotasDevolucion()));
			administracionDTO.setOrdenesCompra(AdministradorOrdenCompra
					.getInstancia().fromModelTODTO(
							administracion.getOrdenesCompra()));
			administracionDTO.setPlanesProduccion(AdministradorPlanProduccion
					.getInstancia().fromModelTODTO(
							administracion.getPlanesProduccion()));
			administracionDTO.setSucursal(AdministradorSucursal.getInstancia()
					.fromModelTODTO(administracion.getSucursal()));
			administracionDTO.setAdministrativos(AdministradorEmpleado.getInstancia()
					.transformModelTODTOAdm(
							administracion.getAdministrativos()));
		}
		return administracionDTO;
	}

	public List<Administracion> fromBeanTOModel(
			List<AdministracionBean> administracionsBean) {
		List<Administracion> administracions = new ArrayList<Administracion>();
		for (AdministracionBean administracionBean : administracionsBean) {
			administracions.add(fromBeanTOModel(administracionBean));
		}
		return administracions;
	}

	public Administracion fromBeanTOModel(AdministracionBean administracionBean) {
		Administracion administracion = null;
		if (administracionBean != null) {
			administracion = new Administracion();
			administracion.setArea(AdministradorArea.getInstancia()
					.fromBeanTOModel(administracionBean.getArea()));
			administracion.setId(administracionBean.getId());
			administracion.setNotasDevolucion(AdministradorNotaDevolucion
					.getInstancia().fromBeanTOModel(
							administracionBean.getNotasDevolucion()));
			administracion.setOrdenesCompra(AdministradorOrdenCompra
					.getInstancia().fromBeanTOModel(
							administracionBean.getOrdenesCompra()));
			administracion.setPlanesProduccion(AdministradorPlanProduccion
					.getInstancia().fromBeanTOModel(
							administracionBean.getPlanesProduccion()));
			administracion.setSucursal(AdministradorSucursal.getInstancia()
					.fromBeanTOModel(administracionBean.getSucursal()));
			administracion.setAdministrativos(AdministradorEmpleado.getInstancia()
					.transformBeanTOModelAdm(administracionBean.getAdministrativos()));
		}
		return administracion;
	}

	public void grabarAdministracion(Administracion administracion) {
		AdministracionBean fb = fromModelTOBean(administracion);
		HibernateAdministracionDAO.getInstancia().grabarAdministracion(fb);

	}

	public Administracion buscarAdministracion(Administracion f) {
		AdministracionBean fb = fromModelTOBean(f);
		fb = HibernateAdministracionDAO.getInstancia().buscarAdministracion(fb);
		return fromBeanTOModel(fb);
	}

	public List<Administracion> buscarAdministracionXSucursal(Sucursal s) {
		SucursalBean sb = AdministradorSucursal.getInstancia().fromModelTOBean(
				s);
		List<AdministracionBean> fb = (List<AdministracionBean>) HibernateAdministracionDAO
				.getInstancia().buscarAdministracionXSucursal(sb);
		return fromBeanTOModel(fb);
	}

	public void updateAdministracion(Administracion adm) {
		AdministracionBean admb = fromModelTOBean(adm);
		HibernateAdministracionDAO.getInstancia().updateAdministracion(admb);

	}
	
	
	public void mergeAdministracion(Administracion adm) {
		AdministracionBean admb = fromModelTOBean(adm);
		HibernateAdministracionDAO.getInstancia().mergeAdministracion(admb);

	}

}
